package servlet;

import java.io.IOException;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import be.ipl.ejb.domaine.Joueur;
import be.ipl.ejb.domaine.Partie;
import be.ipl.ejb.exceptions.ArgumentInvalideException;
import be.ipl.ejb.exceptions.UCCControleException;
import be.ipl.ejb.usecases.GestionPartiesControlleur;
import be.ipl.ejb.usecases.GestionPartiesView;


public class CreerPartie extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@EJB
	private GestionPartiesControlleur ucc;
	
	@EJB
	private GestionPartiesView uccv;

	public CreerPartie() {
		super();
	}


	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);

	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		if (request.getParameter("nomPartie") == null) {
			traitementPreFormulaire(request, response);
			return;
		} 
		traitementFormulaire(request, response);
	
		
	}

	private void traitementFormulaire(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String messageErreur="";
		if(request.getParameter("nomPartie").equals("") || request.getParameter("nomPartie").length()<=2){
			messageErreur+="Votre nom de partie est incorrect !\n";
		}
	
		if(!messageErreur.equals("")){
			request.setAttribute("messageErreur",messageErreur);
			traitementPreFormulaire(request, response);
			return;
		}
		
		String nomPartie = request.getParameter("nomPartie");
		HttpSession session = request.getSession();
		Joueur joueur=null;
		synchronized (session) {
			joueur = (Joueur) session.getAttribute("joueur");
		}
		
		Partie partie=null;
		List<Joueur> listeJoueurs=null;
		try {
			partie=ucc.creerPartie(nomPartie, joueur);
			listeJoueurs=uccv.listeJoueurPartie(partie);
		}catch(UCCControleException e){
			request.setAttribute("messageErreur",e.getMessage());
			traitementPreFormulaire(request, response);
			return;
		} catch (EJBException e) {
			request.setAttribute("messageErreur",e.getMessage());
			traitementPreFormulaire(request, response);
			return;	
		} catch (ArgumentInvalideException e) {
			request.setAttribute("messageErreur",e.getMessage());
			traitementPreFormulaire(request, response);
			return;	
		}

		synchronized (session) {
			session.setAttribute("partieEnCours", partie);
			session.setAttribute("listeJoueurs", listeJoueurs);
		}
				
		RequestDispatcher rd = getServletContext().getNamedDispatcher("salleAttente");
		rd.forward(request, response);
		//TODO Mod
//		response.sendRedirect(response.encodeRedirectURL("salleAttente.html?nomPartie="+partie.getNom()));
	}

	private void traitementPreFormulaire(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		RequestDispatcher rd = getServletContext().getNamedDispatcher("creer");
		rd.forward(request, response);
	}

}
